home *** CD-ROM | disk | FTP | other *** search
/ Hyper Stacks 1994 May / Hyper Stacks (Pacific HiTech)(1994)[Mac].iso / HyperTalk / Groupies 3.2 / card_2577.txt < prev    next >
Text File  |  1988-12-20  |  16KB  |  578 lines

  1. -- card: 2577 from stack: in.2
  2. -- bmap block id: 0
  3. -- flags: 0000
  4. -- background id: 5072
  5. -- name: 
  6.  
  7.  
  8. -- part 136 (field)
  9. -- low flags: 01
  10. -- high flags: 0000
  11. -- rect: left=23 top=4 right=25 bottom=490
  12. -- title width / last selected line: 0
  13. -- icon id / first selected line: 0 / 0
  14. -- text alignment: 1
  15. -- font id: 2
  16. -- text size: 14
  17. -- style flags: 2048
  18. -- line height: 18
  19. -- part name: 
  20.  
  21.  
  22. -- part 21 (button)
  23. -- low flags: 00
  24. -- high flags: 8003
  25. -- rect: left=217 top=153 right=175 bottom=332
  26. -- title width / last selected line: 0
  27. -- icon id / first selected line: 0 / 0
  28. -- text alignment: 1
  29. -- font id: 0
  30. -- text size: 12
  31. -- style flags: 0
  32. -- line height: 16
  33. -- part name: Card button
  34.  
  35.  
  36. -- part 96 (button)
  37. -- low flags: 00
  38. -- high flags: 8002
  39. -- rect: left=280 top=91 right=133 bottom=388
  40. -- title width / last selected line: 0
  41. -- icon id / first selected line: 0 / 0
  42. -- text alignment: 1
  43. -- font id: 0
  44. -- text size: 12
  45. -- style flags: 0
  46. -- line height: 16
  47. -- part name: Card button
  48.  
  49.  
  50. -- part 97 (button)
  51. -- low flags: 00
  52. -- high flags: 8004
  53. -- rect: left=66 top=170 right=201 bottom=184
  54. -- title width / last selected line: 0
  55. -- icon id / first selected line: 0 / 0
  56. -- text alignment: 1
  57. -- font id: 0
  58. -- text size: 12
  59. -- style flags: 0
  60. -- line height: 16
  61. -- part name: Card button
  62.  
  63.  
  64. -- part 98 (field)
  65. -- low flags: 01
  66. -- high flags: 2002
  67. -- rect: left=137 top=221 right=298 bottom=207
  68. -- title width / last selected line: 0
  69. -- icon id / first selected line: 0 / 0
  70. -- text alignment: 1
  71. -- font id: 3
  72. -- text size: 12
  73. -- style flags: 0
  74. -- line height: 16
  75. -- part name: 
  76.  
  77.  
  78. -- part 99 (field)
  79. -- low flags: 01
  80. -- high flags: 2007
  81. -- rect: left=355 top=238 right=285 bottom=500
  82. -- title width / last selected line: 0
  83. -- icon id / first selected line: 0 / 0
  84. -- text alignment: 1
  85. -- font id: 3
  86. -- text size: 12
  87. -- style flags: 0
  88. -- line height: 16
  89. -- part name: 
  90.  
  91.  
  92. -- part 112 (button)
  93. -- low flags: 00
  94. -- high flags: 0000
  95. -- rect: left=469 top=309 right=328 bottom=491
  96. -- title width / last selected line: 0
  97. -- icon id / first selected line: 16560 / 16560
  98. -- text alignment: 1
  99. -- font id: 0
  100. -- text size: 12
  101. -- style flags: 0
  102. -- line height: 16
  103. -- part name: 
  104. ----- HyperTalk script -----
  105. on mouseUp
  106.   go next
  107. end mouseUp
  108.  
  109.  
  110.  
  111. -- part 113 (button)
  112. -- low flags: 00
  113. -- high flags: 0000
  114. -- rect: left=21 top=309 right=328 bottom=43
  115. -- title width / last selected line: 0
  116. -- icon id / first selected line: 15420 / 15420
  117. -- text alignment: 1
  118. -- font id: 0
  119. -- text size: 12
  120. -- style flags: 0
  121. -- line height: 16
  122. -- part name: 
  123. ----- HyperTalk script -----
  124. on mouseUp
  125.   go prev
  126. end mouseUp
  127.  
  128.  
  129.  
  130. -- part 161 (field)
  131. -- low flags: 01
  132. -- high flags: 2004
  133. -- rect: left=11 top=6 right=129 bottom=83
  134. -- title width / last selected line: 0
  135. -- icon id / first selected line: 0 / 0
  136. -- text alignment: 0
  137. -- font id: 3
  138. -- text size: 12
  139. -- style flags: 0
  140. -- line height: 16
  141. -- part name: Groupies Field
  142. ----- HyperTalk script -----
  143. -------------------------------------------------------------------
  144. -- Groupies 3.0, a utility for grouping objects, by Sioux Lacy
  145. -- This script is public domain.  Happy grouping!
  146.  
  147. -- 04 May 1988  v2.1  revised for HyperCard version 1.2
  148. -- 07 May 1988  v2.2  added ability to copy the text in fields
  149. -- 01 June 1988 v2.3  revised to allow selection by dragging a rect
  150. -- 22 July 1988 v3.0  added equal space feature, revised presentation
  151. -- 01 Dec  1988 v3.2  revised
  152. -- Many thanks to Bill Atkinson for his help and encouragement
  153. -------------------------------------------------------------------
  154.  
  155. on NewField
  156.   global whereTheGroupIs
  157.   if whereTheGroupIs is not empty then
  158.     get Choice("Which do you wish to paste:","the Group","menuField")
  159.     if it is "the Group" then
  160.       DeleteMenuField
  161.       Paste
  162.       choose browse tool
  163.       exit NewField
  164.     end if
  165.   end if
  166.   ResetMenuField
  167.   choose browse tool
  168. end NewField
  169.  
  170. on mouseUp
  171.   if the version < 1.2
  172.   then Abort "This utility requires HyperCard 1.2 or later."
  173.   put "Group,Move,Copy,Paste,Erase,Align,Adjust" into messages
  174.   put the userLevel into savedUserLevel
  175.   set the userLevel to 5
  176.   ResetMenuField
  177.   put 1 + (the clickV - top of me) div textHeight of me into clickLine
  178.   if line clickLine of me is not empty then
  179.     if clickLine is not 1 then CheckGroup
  180.     put "‚àö" into char 1 of line clickLine of me
  181.     do item clickLine of messages
  182.     ResetMenuField
  183.   end if
  184.   set the userLevel to savedUserLevel
  185. end mouseUp
  186.  
  187.  
  188. on ResetMenuField
  189.   put " Group" & return & " Move" & return & " Copy" & return & " Paste" & return & " Erase" & return & " Align" & return & " Adjust" into me
  190. end ResetMenuField
  191.  
  192.  
  193. ---------------------------------------------------------------------
  194. -- GROUPIES HANDLERS START HERE
  195. ---------------------------------------------------------------------
  196.  
  197. -- Message: Group
  198. -- This will let the user designate a number of objects to be grouped
  199. -- either by clicking on them, or showing a surrounding rectangle
  200.  
  201. on Group
  202.   global objectList, whereTheGroupIs
  203.   put "Objects" into selectMethod  -- default method
  204.   if the optionKey is down then
  205.     put Choice("Group objects by selecting:", "Objects", "Area") into selectMethod
  206.   end if
  207.   if selectMethod is "Objects" then
  208.     Confirm "Click buttons or fields, then press command."
  209.     put empty into objectList
  210.     put empty into whereTheGroupIs
  211.     repeat until the commandKey is down
  212.       set cursor to arrow
  213.       if the mouseClick then
  214.         set cursor to watch
  215.         put HitTest(the clickLoc) into hitWhat
  216.         if hitWhat is not empty and hitWhat is not in objectList
  217.         then put hitWhat & "," after objectList
  218.       else beep  -- invalid hit or nothing hit
  219.     end if
  220.   end repeat
  221. else   -- selectMethod is "Area"
  222.   Confirm "Use 2 clicks to show opposite corners of area."
  223.   put empty into objectList
  224.   put empty into whereTheGroupIs
  225.   set cursor to cross
  226.   wait until the mouseClick
  227.   put the clickLoc into selectRect
  228.   DrawMarker selectRect
  229.   wait until the mouseClick
  230.   put "," & the clickLoc after selectRect
  231.   DrawMarker the clickLoc
  232.   set cursor to watch
  233.   EraseMarkers
  234.   WithinRect selectRect
  235. end if
  236. delete last char of objectList   -- get rid of trailing comma
  237. choose browse tool
  238. end Group
  239.  
  240. -- Message: Move
  241. -- This will reposition (on the current card) all the
  242. -- grouped objects.
  243. -- They will follow the mouse location.
  244.  
  245. on Move
  246.   global objectList
  247.   CheckGroup
  248.   Confirm "Click and drag the group with mouse down."
  249.   set cursor to arrow
  250.   wait until the mouse is down
  251.   put the mouseLoc into thisLoc
  252.   repeat while the mouse is down
  253.     put thisLoc into lastLoc
  254.     put the mouseLoc into thisLoc
  255.     if thisLoc is not lastLoc then
  256.       put item 1 of thisLoc - item 1 of lastLoc into deltaX
  257.       put item 2 of thisLoc - item 2 of lastLoc into deltaY
  258.       lock screen
  259.       repeat with i = 1 to the number of items in objectList
  260.         put item i of objectList into object
  261.         get location of object
  262.         add deltaX to item 1 of it
  263.         add deltaY to item 2 of it
  264.         set location of object to it
  265.       end repeat
  266.       unlock screen
  267.     end if
  268.   end repeat
  269. end Move
  270.  
  271. -- Message: Copy
  272. -- This will remember, in a global variable, the current card.  Then,
  273. -- when the user 'pastes', the objects will be copied from that card.
  274.  
  275. on Copy
  276.   global whereTheGroupIs, savedUserLevel
  277.   CheckGroup
  278.   put the userLevel into savedUserLevel
  279.   set the userLevel to 5   -- will be restored after 'Paste'
  280.   Confirm "Go wherever you wish and 'Paste'."
  281.   put the long id of this card into WhereTheGroupIs
  282. end Copy
  283.  
  284. -- Message: Paste
  285. -- This will paste all the objects in the group into the current card /
  286. -- background. It must be preceded by 'Copy'.
  287.  
  288. on Paste
  289.   global objectList, WhereTheGroupIs, savedUserLevel
  290.   CheckGroup
  291.   if WhereTheGroupIs is empty
  292.   then Abort "Please choose 'Copy' before 'Paste'."
  293.   set cursor to watch
  294.   set lockMessages to true
  295.   lock screen
  296.   repeat with i = 1 to the number of items in objectList
  297.     push this card
  298.     go to WhereTheGroupIs
  299.     put item i of objectList into object
  300.     if word 2 of object is "field"
  301.     then put the value of object into copyOfText
  302.     select object
  303.     type "C" with commandKey
  304.     pop card
  305.     set editBkgnd to (word 1 of object = "bkgnd")
  306.     type "V" with commandKey
  307.     if word 2 of object is "field" then
  308.       if word 1 of object is "bkgnd"
  309.       then put copyOfText into bkgnd field (the number of bkgnd fields)
  310.     else put copyOfText into card field (the number of card fields)
  311.   end if
  312. end repeat
  313. choose browse tool
  314. unlock screen
  315. set the userLevel to savedUserLevel
  316. Prompt "These new objects are not grouped. The old group is still valid."
  317. end Paste
  318.  
  319. -- Message: Erase
  320. -- This will delete all the objects in the group. They are removed
  321. -- from the stack, and the operation is not undoable.
  322.  
  323. on Erase
  324.   global objectList, WhereTheGroupIs
  325.   CheckGroup
  326.   Confirm "Deleting group is not undoable. Are you sure?"
  327.   repeat with i = the number of items in objectList down to 1
  328.     select item i of objectList
  329.     type "X" with commandKey
  330.   end repeat
  331.   put empty into objectList
  332.   put empty into WhereTheGroupIs
  333.   choose browse tool
  334. end Erase
  335.  
  336. -- Message: Align
  337. -- This will line up the objects flush left, right, top or bottom,
  338. -- depending on the user's wishes.
  339.  
  340. on Align
  341.   global objectList
  342.   CheckGroup
  343.   put Choice("Adjust members by moving them:","Left/Right","Up/Down") into axis
  344.   if axis is "Up/Down"
  345.   then answer "Align objects at:" with "Top" or "Bottom" or "Center"
  346. else answer "Align objects at:" with "Left" or "Right" or "Center"
  347. put it into alignment
  348. Confirm "Click where you wish them to align."
  349. set cursor to cross
  350. wait until the mouseClick
  351. if alignment is "Center" then
  352.   repeat with i = 1 to the number of items in objectList
  353.     put item i of objectList into object
  354.     get location of object
  355.     if axis is "Up/Down"
  356.     then put the clickV into item 2 of it
  357.   else put the clickH into item 1 of it
  358.   set location of object to it
  359. end repeat
  360. else
  361.   repeat with i = 1 to the number of items in objectList
  362.     put item i of objectList into object
  363.     if axis is "Up/Down" then
  364.       if alignment is "Top"
  365.       then set top of object to the clickV
  366.     else set bottom of object to the clickV
  367.   else if axis is "Left/Right" then
  368.     if alignment is "Left"
  369.     then set left of object to the clickH
  370.   else set right of object to the clickH
  371. end if
  372. end repeat
  373. end if
  374. end Align
  375.  
  376. -- Message: Adjust
  377. -- This will put an equal amount of 'white' space between consecutive
  378. -- objects in the group. Note that the objects must be in ascending
  379. -- order for this to work as expected.
  380.  
  381. on Adjust
  382.   global objectList
  383.   CheckGroup
  384.   put Choice("Adjust space between objects:","Horizontally","Vertically") into adjust
  385.   Confirm "Use 2 clicks to show desired spacing."
  386.   set cursor to cross
  387.   wait until the mouseClick
  388.   put the clickLoc into startLoc
  389.   DrawMarker startLoc
  390.   wait until the mouseClick
  391.   put the clickLoc into endLoc
  392.   DrawMarker endLoc
  393.   SortGroup adjust
  394.   if adjust = "Horizontally" then
  395.     put abs(item 1 of endLoc - item 1 of startLoc) into horizSpace
  396.     put right of item 1 of objectList into lastRight
  397.     repeat with i = 2 to the number of items in objectList
  398.       put item i of objectList into object
  399.       set left of object to lastRight + horizSpace
  400.       put right of object into lastRight
  401.     end repeat
  402.   else  -- adjust "Vertically"
  403.     put abs(item 2 of endLoc - item 2 of startLoc) into vertSpace
  404.     put bottom of item 1 of objectList into lastBottom
  405.     repeat with i = 2 to the number of items in objectList
  406.       put item i of objectList into object
  407.       set top of object to lastBottom + vertSpace
  408.       put bottom of object into lastBottom
  409.     end repeat
  410.   end if
  411.   EraseMarkers
  412. end Adjust
  413.  
  414. -------------------------------------------------------------
  415.  
  416. on Abort what
  417.   answer what
  418.   exit to HyperCard
  419. end Abort
  420.  
  421. on CheckGroup
  422.   global objectList
  423.   if objectList is empty then Abort "There are no objects in the group."
  424. end CheckGroup
  425.  
  426. function Choice prompt, choice1, choice2
  427. answer prompt with choice1 or choice2 or "Cancel"
  428. if it is "Cancel" then exit to HyperCard
  429. return it
  430. end Choice
  431.  
  432. on Confirm what
  433.   answer what with "Cancel" or "OK"
  434.   if it is "Cancel" then exit to HyperCard
  435. end Confirm
  436.  
  437. on DrawMarker where
  438.   lock screen
  439.   doMenu "New Button"
  440.   put the number of card btns into newBtn
  441.   set icon of card btn newBtn to "Marker Cross"
  442.   set style of card btn newBtn to transparent
  443.   set showName of card btn newBtn to false
  444.   set rect of card btn newBtn to 0,0,20,20
  445.   set loc of card btn newBtn to where
  446.   set name of card btn newBtn to empty
  447.   choose browse tool
  448.   unlock screen
  449. end DrawMarker
  450.  
  451. on EraseMarkers
  452.   lock screen
  453.   select card btn (the number of card btns)
  454.   doMenu "Clear Button"
  455.   select card btn (the number of card btns)
  456.   doMenu "Clear Button"
  457.   choose browse tool
  458.   unlock screen
  459. end EraseMarkers
  460.  
  461. function HitTest where
  462. repeat with i = the number of card buttons down to 1
  463.   if where is within rect of card button i then
  464.     if visible of card button i
  465.     then return "card button id " & the id of card button i
  466.   end if
  467. end repeat
  468. repeat with i = the number of card fields down to 1
  469.   if where is within rect of card field i then
  470.     if visible of card field i
  471.     then return "card field id " & the id of card field i
  472.   end if
  473. end repeat
  474. repeat with i = the number of bkgnd buttons down to 1
  475.   if where is within rect of bkgnd button i then
  476.     if visible of bkgnd button i
  477.     then return "bkgnd button id " & the id of bkgnd button i
  478.   end if
  479. end repeat
  480. repeat with i = the number of bkgnd fields down to 1
  481.   if where is within rect of bkgnd field i then
  482.     if visible of bkgnd field i
  483.     then return "bkgnd field id " & the id of bkgnd field i
  484.   end if
  485. end repeat
  486. return empty
  487. end HitTest
  488.  
  489. on Prompt what
  490.   put what
  491.   put the seconds into startTime
  492.   put the mouseLoc into startLoc
  493.   wait until (the seconds = startTime+10) or (the mouseLoc <>¬¨ startLoc)
  494.   put empty into message box
  495.   hide message box
  496. end Prompt
  497.  
  498. on SortGroup how
  499.   global objectList
  500.   put empty into sortedList
  501.   if how is "Vertically" then put true into verticalSort
  502.   else put false into verticalSort
  503.   repeat with i = 1 to the number of items in objectList
  504.     put false into inserted
  505.     if verticalSort then get top of item i of objectList
  506.     else get left of item i of objectList
  507.     repeat with j = 1 to the number of items in sortedList
  508.       if (verticalSort and (it < top of item j of sortedList)) or (not verticalSort and (it < left of item j of sortedList)) then
  509.         put item i of objectList & "," before item j of sortedList
  510.         put true into inserted
  511.         exit repeat
  512.       end if
  513.     end repeat
  514.     if inserted is false then put item i of objectList & "," after sortedList
  515.   end repeat
  516.   delete last char of sortedList
  517.   put sortedList into objectList
  518. end SortGroup
  519.  
  520. on WithinRect selectRect
  521.   global objectList
  522.   repeat with i = the number of card buttons down to 1
  523.     if the loc of card button i is within selectRect then
  524.       if visible of card button i
  525.       then put "card button id " & the id of card button i & "," after objectList
  526.     end if
  527.   end repeat
  528.   repeat with i = the number of card fields down to 1
  529.     if the loc of card field i is within selectRect then
  530.       if visible of card field i
  531.       then put "card field id " & the id of card field i & "," after objectList
  532.     end if
  533.   end repeat
  534.   repeat with i = the number of bkgnd buttons down to 1
  535.     if the loc of bkgnd button i is within selectRect then
  536.       if visible of bkgnd button i
  537.       then put "bkgnd button id " & the id of bkgnd button i & "," after objectList
  538.     end if
  539.   end repeat
  540.   repeat with i = the number of bkgnd fields down to 1
  541.     if the loc of bkgnd field i is within selectRect then
  542.       if visible of bkgnd field i
  543.       then put "bkgnd field id " & the id of bkgnd field i & "," after objectList
  544.     end if
  545.   end repeat
  546. end WithinRect
  547.  
  548.  
  549.  
  550. -- part contents for card part 98
  551. ----- text -----
  552. card field with
  553. text
  554.  
  555. -- part contents for card part 99
  556. ----- text -----
  557. card field 
  558. with text
  559.  
  560. -- part contents for background part 11
  561. ----- text -----
  562. bkgnd field
  563. with 
  564. text
  565.  
  566. -- part contents for card part 136
  567. ----- text -----
  568. Try out Groupies with these Objects...
  569.  
  570. -- part contents for card part 161
  571. ----- text -----
  572.  Group
  573.  Move
  574.  Copy
  575.  Paste
  576.  Erase
  577.  Align
  578.  Adjust